FPGA丨设计行缓存(linebuffer)生成像素矩阵

您所在的位置:网站首页 fpga 滤波 FPGA丨设计行缓存(linebuffer)生成像素矩阵

FPGA丨设计行缓存(linebuffer)生成像素矩阵

#FPGA丨设计行缓存(linebuffer)生成像素矩阵| 来源: 网络整理| 查看: 265

一、行缓存介绍

一幅图像是由一个个像素点构成的,对于一幅480*272大小的图片来说,其宽度是480,高度是272。在使用FPGA进行图像处理时,最关键的就是使用FPGA内部的存储资源对像素行进行缓存与变换。

由于在图像处理过程中,经常需要对图像进行开窗。如在进行卷积操作时,我们需要将开窗得到的如3X3大小的局部图像数据与卷积核进行卷积运算,从而完成处理。而开窗操作需要使用行缓存来实现,因此下面就介绍一下行缓存是什么。 在这里插入图片描述 假如我们需要3X3的窗口,那么我们就需要设计3行行缓存。因为正常情况下,大多图像数据都是一行一行的,先从左到右,然后从上到下将每一个像素数据输出。如果不加处理,那么我们是不能得到3X3的图像窗口的,我们的最终目的应该是让一帧图像的三行数据对齐之后同时输出,这样我们才能得到3X3的图像窗口!!!

为了实现3行行缓存,由上图可知,我们就需要3个fifo。整体的思路就是,第一行数据依次输入进来写入fifo1,当写到第一行最后一个数据时,开始从fifo1依次读出数据然后写入fifo2,依次类推!!!就这样,当第四行数据到来的时候,此时三个fifo会同时输出数据,而输出的数据正是前三行数据且是对齐的。

二、程序设计

1、line_buffer

`timescale 1ns/1ps module line_buffer ( rst_n, clk, din, dout, valid_in, valid_out ); parameter WIDTH = 10;//数据位宽 parameter IMG_WIDTH = 480;//图像宽度 input rst_n; input clk; input [WIDTH-1:0] din; output [WIDTH-1:0] dout; input valid_in;//输入数据有效,写使能 output valid_out;//输出给下一级的valid_in,也即上一级开始读的同时下一级就可以开始写入 wire rd_en;//读使能 reg [8:0] cnt;//这里的宽度注意要根据IMG_WIDTH的值来设置,需要满足cnt的范围≥图像宽度 always @(posedge clk or negedge rst_n) begin if(!rst_n) cnt 1'b0}}; else if(valid_in) if(cnt == IMG_WIDTH) cnt


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3